home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
SHLRAM.SDA
/
TWINCOPY.C
< prev
Wrap
Text File
|
2019-04-13
|
4KB
|
213 lines
#INCLUDE <STDIO.H>
CHAR INDEV;
CHAR OUTDEV;
CHAR VERBOSE;
MAIN(ARGC,ARGV)
UNSIGNED ARGC;
CHAR **AV;
█
INT FCOPY();
UNSIGNED I;
CHAR **ARGV;
ARGV = AV;
ARGC = INIT(ARGC,&ARGV);
FOR (I = 1; I < ARGC; ++I)
GLOB(ARGV[I],&FCOPY);
▌
INIT(ARGC,ARGV)
█
EXTERN CHAR SYSDEV, WRKDEV;
INDEV = SYSDEV;
OUTDEV = WRKDEV;
VERBOSE = 0;
RETURN ARGC;
▌
/*
* EVENTUALLY MAKE THIS INVOKE FUNCTION
* FOR EACH FILE IN THE WORK DIRECTORY
* WHICH MATCHES "PATTERN"
*
* CAVEAT: OPENDIR() DOES NOT WORK WITH
* ╥┴═ DISK
* 2ND CAVEAT: WE COPY ╞╥╧═ SYSTEM DISK
*/
GLOB(PATTERN, PFUNC)
CHAR *PATTERN;
INT (*PFUNC)();
█
(*PFUNC)(PATTERN);
▌
#DEFINE ├╚╦╔╬ 0XFFC6
#DEFINE ├╚╦╧╒╘ 0XFFC9
#DEFINE ├╠╥├╚╬ 0XFFCC
STATIC CHAR BLFLAG;
STATIC CHAR MLGETB[] = █
0X20, 0X├╞, 0X╞╞, /* T1 JSR CHRIN */
0X91, 0X╞┬, /* STA ($FB),Y */
0X├8, /* INY */
0X20, 0X┬7, 0X╞╞, /* JSR READST */
0X─0, 0X04, /* BNE T2 */
0X├4, 34, /* CPY 34 */
0X─0, 0X╞1, /* BNE T1 */
0X60, /* T2 RTS */
▌;
UNSIGNED
GETBLK(BUFFER, SIZE, FID)
CHAR *BUFFER;
UNSIGNED SIZE;
╞╔╠┼ FID;
█
STATIC CHAR A, X, Y;
UNSIGNED N;
IF (BLFLAG) RETURN 0;
/* ZERO PAGE USAGE: SEE ╨OWER ├ ═ANUAL */
*((CHAR **)0XFB) = BUFFER;
*((CHAR *)34) = SIZE;
SYS(├╠╥├╚╬, &A, &X, &Y);
X = FID;
SYS(├╚╦╔╬, &A, &X, &Y);
Y = 0;
SYS(MLGETB, &A, &X, &Y);
N = Y;
IF (A != 0) BLFLAG = A;
SYS(├╠╥├╚╬, &A, &X, &Y);
RETURN N;
▌
STATIC CHAR MLPUTB[] = █
0X┬1, 34, /* T1 LDA (34),Y */
0X20, 0X─2, 0X╞╞, /* JSR CHROUT */
0X├8, /* INY */
0X├4, 0X╞┬, /* CPY $FB */
0X─0, 0X╞6, /* BNE T1 */
0X60, /* RTS */
▌;
UNSIGNED
PUTBLK(BUFFER, N, FID)
CHAR *BUFFER;
UNSIGNED N;
╞╔╠┼ FID;
█
STATIC CHAR A, X, Y;
IF (N == 0) RETURN 0;
*((CHAR **)34) = BUFFER;
*((CHAR *)0XFB) = N;
SYS(├╠╥├╚╬, &A, &X, &Y);
X = FID;
SYS(├╚╦╧╒╘, &A, &X, &Y);
Y = 0;
SYS(MLPUTB, &A, &X, &Y);
SYS(├╠╥├╚╬, &A, &X, &Y);
RETURN N;
▌
STATIC CHAR BUFF[256];
INT
FCOPY(NAME)
CHAR *NAME;
█
╞╔╠┼ OPENIN(), OPENOUT();
╞╔╠┼ INFID, OUTFID;
UNSIGNED N;
AUTO UNSIGNED TYPE;
TYPE = 0;
IF (VERBOSE)
PRINTF("COPY %S FROM DEVICE %D TO WORK\N",NAME,INDEV);
INFID = 5;
IF ((INFID = OPENIN(INDEV,3,NAME,&TYPE)) == 0)
PRINTF("CAN'T OPEN %S FOR INPUT\N", NAME);
ELSE IF ((OUTFID = OPENOUT(NAME,TYPE)) == 0 ▀▀
FERROR())
PRINTF("CAN'T OPEN %S FOR OUTPUT\N", NAME);
ELSE █
/*
* SORRY, THIS ISN'T FAST ENOUGH!
*
* WHILE((C = FGETC(INFID)) != ┼╧╞)
* FPUTC(C, OUTFID);
*/
BLFLAG = 0;
WHILE ((N = GETBLK(BUFF,254,INFID)) != 0)
PUTBLK(BUFF,N,OUTFID);
▌
FCLOSE(INFID);
FCLOSE(OUTFID);
▌
/*
* OPENIN - SPECIAL
* OPENS FILE ON GIVEN DEVICE, AND
* ATTEMPTS TO DETERMINE INPUT TYPE
* BY THE ICKY METHOD OF REPEATED
* OPEN ATTEMPTS
*
* UNFORTUNATELY THIS WILL BE SLOW
*/
OPENIN(DEV,SECADD,NAME,PTYPE)
UNSIGNED DEV;
UNSIGNED SECADD;
CHAR *NAME;
UNSIGNED *PTYPE;
█
EXTERN CHAR WRKDEV;
AUTO CHAR NAMBUF[30];
REGISTER ╞╔╠┼ RFID;
REGISTER CHAR *TSTR;
REGISTER UNSIGNED FE;
DEVICE(DEV);
*PTYPE = 0;
TSTR = INDEX(NAME, ',');
IF (TSTR != ╬╒╠╠ &&
*++TSTR != '\0' && *TSTR != 'R') █
RFID = FOPEN(NAME,"R"); /* LEAVE *PTYPE 0 */
DEVICE(WRKDEV);
RETURN RFID;
▌
FOR (TSTR = "SPU"; *TSTR != '\0'; ++TSTR) █
SPRINTF(NAMBUF,"%S,%C", NAME, *TSTR);
RFID = FOPEN(NAMBUF,"R");
FE = FERROR();
IF (RFID != 0 && FE == 0) █
*PTYPE = *TSTR;
DEVICE(WRKDEV);
RETURN RFID;
▌
ELSE
FCLOSE(RFID);
▌
DEVICE(WRKDEV);
RETURN 0;
▌
/*
* OPENOUT - SPECIAL TO DO FOPEN OF
* SPECIFIED TYPE
*/
╞╔╠┼
OPENOUT(NAME,TYPE)
CHAR *NAME;
UNSIGNED TYPE;
█
AUTO CHAR NAMBUF[30];
IF (TYPE != 0) █
SPRINTF(NAMBUF,"%S,%C", NAME, TYPE);
NAME = NAMBUF;
▌
RETURN FOPEN(NAME,"W");
▌